package com.cskaoyan.javase.string._5compare;
/**
 * Comparable接口除了灵活性欠佳
 * 实际上还有一个非常大的、在设计类时的麻烦。
 * 某个类实现Comparable接口后，该类下存在两个方法来对该类的对象进行比较：
 *      1.equals方法（继承自Object类）
 *      2.compareTo方法
 * 在上面我们讲了这两个方法的区别：
 *      1.equals方法倾向于比较相等，没有大小概念。
 *      2.compareTo方法虽然也有相等的概念，但更倾向于比较大小，其作用是排序。
 * 以上两个方法出现在同一个类中,都有比较相等的概念,那么它们之间是有关联的
 *
 * 查看以下从小到大排序的一列数：
 * 1 1 2 3 4 5 6
 * 1和1，这两个数在排序时处在相同的位置，那么它们就是相等的。
 *
 * 结合equals方法和compareTo方法，这两个方法在逻辑上的联系是：
 *      1.如果equals方法认为相等，compareTo方法也应该返回0，它们在排序时处在相同的位置。
 *      2.如果equals方法认为不相等，compareTo方法应该返回非0，它们在排序时必须处在不同的位置。
 * 满足以上逻辑，我们称这个类“equals方法和compareTo方法具有一致性“，”该类具有和equals方法一致的自然排序“。
 *
 * 为了满足以上逻辑,这说明compareTo方法应该如何重写?
 * compareTo方法应该保证和equals方法同样的重写规则,比如根据age重写equals,那么compareTo方法也应该根据age来进行重写
 * 这样的规则设定,同样给compareTo方法的重写带来了一定的麻烦
 *
 * 注意: 在JDK源码中,所有实现Comparable接口以实现自然排序的类,都保持了以上的一致性
 * 也就是说,JDK源码中的类重写equals方法的规则和重写compareTo的规则必然是一样的
 *
 * 总之,使用Comparable接口来实现自然排序,局限性很大,麻烦的地方很多.
 * 假如只是希望简简单单排个序,我们更推荐使用带比较器规则的自然排序方法来实现排序.
 *
 * @since 16:22
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
}
